// 这里编写路由权限控制代码
// 前置守卫
import router from '@/router'
import store from '@/store'
// 进度条
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

import { asyncRoutes } from '@/router/asyncRoutes'

// 前置守卫
const Whitelist = ['/login', '/404'] // 白名单

router.beforeEach(async(to, from, next) => {
  // 开启进度条
  NProgress.start()
  const token = store.state.user.token
  //   是否有token
  if (token) {
    //   是否登录页面
    if (to.path === '/login') {
      next('/')
    } else {
      next()
      //   优化请求
      const userId = store.state.user.userInfo.userId
      if (!userId) {
      // 调用action函数 这个位置哦 !!!!!
        const res = await store.dispatch('user/fetchUserInfo')
        console.log(res)
        const menus = res.menus
        console.log(menus, asyncRoutes)
        const filterRoutes = asyncRoutes.filter(route => {
          // 需要做判断 把满足条件的route返回
          // route对象中有一个标识如果能在menus数组中找到 就可以有资格进入
          if (menus.includes(route.children[0].name)) {
            return route
          }
          console.log(route)
        })
        console.log('过滤之后的新数组', filterRoutes)
        // 1.动态添加到路由系统
        router.addRoutes([...filterRoutes, { path: '*', redirect: '/404', hidden: true }])
        // 存入vuex
        store.commit('menu/setMenuList', filterRoutes)
      }
    }
  } else {
    //   是否在白名单
    if (Whitelist.includes(to.path)) {
      next()
    } else {
      next('/login')
    }
  }
  // 结束进度条
  NProgress.done()
})
// 前置守卫
